package com.kexio.auth.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 数据范围注解
 * 用于标记需要数据权限控制的方法
 * 
 * @author Kexio Team
 * @since 1.0.0
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataScope {
    
    /**
     * 是否启用数据权限
     */
    boolean enabled() default true;
    
    /**
     * 数据权限类型
     */
    DataScopeType type() default DataScopeType.SELF;
    
    /**
     * 数据权限字段名
     */
    String field() default "create_by";
    
    /**
     * 数据权限列名
     */
    String column() default "create_by";
    
    /**
     * 表别名
     */
    String tableAlias() default "";
    
    /**
     * 是否过滤租户数据
     */
    boolean filterTenant() default true;
    
    /**
     * 数据权限类型枚举
     */
    enum DataScopeType {
        ALL, CUSTOM, DEPT, DEPT_AND_CHILD, SELF
    }
}